<!doctype html>
<html lang="en-us">
<head>
	<meta name="generator" content="Hugo 0.63.2" />

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>刹宕博客 | 人如秋鸿来有信，事若春梦了无痕</title>
    <meta property="og:title" content="刹宕博客 | 人如秋鸿来有信，事若春梦了无痕">
    <meta property="og:type" content="website">
    <meta name="Keywords" content="java,系统架构,shutdown,孟江莱">
    <meta name="description" content="Java">
    <meta property="og:url" content="http://www.shutdown.cn/">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">

    <link rel="stylesheet" href='/css/normalize.css'>
    <link rel="stylesheet" href='/css/style.css'>
    <link rel="alternate" type="application/rss+xml+xml" href="http://www.shutdown.cn/index.xml" title="刹宕博客" />
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    


    
    
</head>


<body>
    <header id="header" class="clearfix">
    <div class="container">
        <div class="col-group">
            <div class="site-name ">
                
                    <h1>
                        <a id="logo" href="http://www.shutdown.cn">
                            刹宕博客
                        </a>
                    </h1>
                
                <p class="description">人如秋鸿来有信，事若春梦了无痕</p>
            </div>
            <div>
                <nav id="nav-menu" class="clearfix">
                    <a class="current" href="http://www.shutdown.cn">首页</a>
                    
                    <a  href="http://www.shutdown.cn/tools/" title="工具">工具</a>
                    
                    <a  href="http://www.shutdown.cn/archives/" title="归档">归档</a>
                    
                    <a  href="http://www.shutdown.cn/about/" title="关于">关于</a>
                    
                </nav>
            </div>
        </div>
    </div>
</header>

    <div id="body">
        <div class="container">
            <div class="col-group">

                <div class="col-8" id="main">
                    
<div class="res-cons">
    
    <article class="post">
        <header>
            <h1 class="post-title">
                <a href="http://www.shutdown.cn/post/%E6%B7%B1%E5%85%A5%E5%89%96%E6%9E%90Redis%E5%AE%A2%E6%88%B7%E7%AB%AFJedis%E7%9A%84%E7%89%B9%E6%80%A7%E5%92%8C%E5%8E%9F%E7%90%86/" title=""></a>
            </h1>
        </header>
        <date class="post-meta meta-date">
            1年1月1日
        </date>
        
        <div class="post-content">
            一、开篇 Redis作为目前通用的缓存选型，因其高性能而倍受欢迎。Redis的2.x版本仅支持单机模式，从3.0版本开始引入集群模式。
Redis的Java生态的客户端当中包含Jedis、Redisson、Lettuce，不同的客户端具备不同的能力是使用方式，本文主要分析Jedis客户端。
Jedis客户端同时支持单机模式、分片模式、集群模式的访问模式，通过构建Jedis类对象实现单机模式下的数据访问，通过构建ShardedJedis类对象实现分片模式的数据访问，通过构建JedisCluster类对象实现集群模式下的数据访问。
Jedis客户端支持单命令和Pipeline方式访问Redis集群，通过Pipeline的方式能够提高集群访问的效率。
本文的整体分析基于Jedis的3.5.0版本进行分析，相关源码均参考此版本。
二、Jedis访问模式对比 Jedis客户端操作Redis主要分为三种模式，分表是单机模式、分片模式、集群模式。
 单机模式主要是创建Jedis对象来操作单节点的Redis，只适用于访问单个Redis节点。 分片模式（ShardedJedis）主要是通过创建ShardedJedisPool对象来访问分片模式的多个Redis节点，是Redis没有集群功能之前客户端实现的一个数据分布式方案，本质上是客户端通过一致性哈希来实现数据分布式存储。 集群模式（JedisCluster）主要是通过创建JedisCluster对象来访问集群模式下的多个Redis节点，是Redis3.0引入集群模式后客户端实现的集群访问访问，本质上是通过引入槽（slot）概念以及通过CRC16哈希槽算法来实现数据分布式存储。  单机模式不涉及任何分片的思想，所以我们着重分析分片模式和集群模式的理念。
2.1 分片模式  分片模式本质属于基于客户端的分片，在客户端实现如何根据一个key找到Redis集群中对应的节点的方案。 Jedis的客户端分片模式采用一致性Hash来实现，一致性Hash算法的好处是当Redis节点进行增减时只会影响新增或删除节点前后的小部分数据，相对于取模等算法来说对数据的影响范围较小。 Redis在大部分场景下作为缓存进行使用，所以不用考虑数据丢失致使缓存穿透造成的影响，在Redis节点增减时可以不用考虑部分数据无法命中的问题。  分片模式的整体应用如下图所示，核心在于客户端的一致性Hash策略。
（引用自：www.cnblogs.com）
2.2 集群模式  集群模式本质属于服务器分片技术，由Redis集群本身提供分片功能，从Redis 3.0版本开始正式提供。 集群的原理是：一个 Redis 集群包含16384 个哈希槽（Hash slot）， Redis保存的每个键都属于这16384个哈希槽的其中一个， 集群使用公式CRC16(key)%16384 来计算键 key 属于哪个槽， 其中 CRC16(key) 语句用于计算键key的CRC16校验和 。 集群中的每个节点负责处理一部分哈希槽。举个例子， 一个集群可以有三个哈希槽， 其中：   节点 A 负责处理 0 号至 5500 号哈希槽。
节点 B 负责处理 5501 号至 11000 号哈希槽。
节点 C 负责处理 11001 号至 16383 号哈希槽。
  Redis在集群模式下对于key的读写过程首先将对应的key值进行CRC16计算得到对应的哈希值，将哈希值对槽位总数取模映射到对应的槽位，最终映射到对应的节点进行读写。以命令set(&ldquo;key&rdquo;, &ldquo;value&rdquo;)为例子，它会使用CRC16算法对key进行计算得到哈希值28989，然后对16384进行取模得到12605，最后找到12605对应的Redis节点，最终跳转到该节点执行set命令。 集群模式的整体应用如下图所示，核心在于集群哈希槽的设计以及重定向命令。  （引用自：https://www.jianshu.com）
三、Jedis的基础用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38  // Jedis单机模式的访问 public void main(String[] args) { // 创建Jedis对象  jedis = new Jedis(&#34;localhost&#34;, 6379); // 执行hmget操作  jedis.hmget(&#34;foobar&#34;, &#34;foo&#34;); // 关闭Jedis对象  jedis.close(); } // Jedis分片模式的访问 public void main(String[] args) { HostAndPort redis1 = HostAndPortUtil.……
        </div>
        <p class="readmore"><a href="http://www.shutdown.cn/post/%E6%B7%B1%E5%85%A5%E5%89%96%E6%9E%90Redis%E5%AE%A2%E6%88%B7%E7%AB%AFJedis%E7%9A%84%E7%89%B9%E6%80%A7%E5%92%8C%E5%8E%9F%E7%90%86/">阅读全文</a></p>
    </article>
    
    



<ol class="page-navigator">
    
    <li class="prev">
        <a href="http://www.shutdown.cn/page/4/">上一页</a>
    </li>
    

    
    <li >
        <a href="http://www.shutdown.cn/">1</a>
    </li>
    
    <li >
        <a href="http://www.shutdown.cn/page/2/">2</a>
    </li>
    
    <li >
        <a href="http://www.shutdown.cn/page/3/">3</a>
    </li>
    
    <li >
        <a href="http://www.shutdown.cn/page/4/">4</a>
    </li>
    
    <li  class="current">
        <a href="http://www.shutdown.cn/page/5/">5</a>
    </li>
    

    
</ol>



</div>

                </div>

                <div id="secondary">
    <section class="widget">
        <form id="search" action='http://www.shutdown.cn/search/' method="get" accept-charset="utf-8" target="_blank" _lpchecked="1">
      
      <input type="text" name="q" maxlength="20" placeholder="Search">
      <input type="hidden" name="sitesearch" value="http://www.shutdown.cn">
      <button type="submit" class="submit icon-search"></button>
</form>
    </section>
    
    <section class="widget">
        <h3 class="widget-title">最近文章</h3>
<ul class="widget-list">
    
    <li>
        <a href="http://www.shutdown.cn/post/lvs_keepalive_jenkins2_ha/" title="lvs&#43;keepalive配置Jenkins2高可用 ">lvs&#43;keepalive配置Jenkins2高可用 </a>
    </li>
    
    <li>
        <a href="http://www.shutdown.cn/post/markdown/" title="markdown语法">markdown语法</a>
    </li>
    
    <li>
        <a href="http://www.shutdown.cn/post/first/" title="hello world">hello world</a>
    </li>
    
    <li>
        <a href="http://www.shutdown.cn/post/apt-get-update%E5%87%BA%E7%8E%B0NO_PUBKEY%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/" title=""></a>
    </li>
    
    <li>
        <a href="http://www.shutdown.cn/post/BigKey/" title=""></a>
    </li>
    
    <li>
        <a href="http://www.shutdown.cn/post/bigkey%E5%88%A0%E9%99%A4%E9%97%AE%E9%A2%98/" title=""></a>
    </li>
    
    <li>
        <a href="http://www.shutdown.cn/post/cachecloud%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2/" title=""></a>
    </li>
    
    <li>
        <a href="http://www.shutdown.cn/post/copy-on-write/" title=""></a>
    </li>
    
    <li>
        <a href="http://www.shutdown.cn/post/Cpu%E6%8C%96%E7%9F%BFRedis%E7%AB%9F%E6%98%AF%E5%86%85%E9%AC%BC/" title=""></a>
    </li>
    
    <li>
        <a href="http://www.shutdown.cn/post/docker-%E5%90%AF%E5%8A%A8-zookeeper/" title=""></a>
    </li>
    
</ul>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">分类</h3>
<ul class="widget-list">
    
    <li><a href="http://www.shutdown.cn/categories/cicd/">cicd (1)</a></li>
    
    <li><a href="http://www.shutdown.cn/categories/%E5%88%86%E7%B1%BB/">分类 (2)</a></li>
    
</ul>
    </section>

    <section class="widget">
        <h3 class="widget-title">标签</h3>
<div class="tagcloud">
    
</div>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">其它</h3>
        <ul class="widget-list">
            <li><a href="http://www.shutdown.cn/index.xml">文章 RSS</a></li>
        </ul>
    </section>
</div>
            </div>
        </div>
    </div>
    <footer id="footer">
    <div class="container">
        &copy; 2013-2022版权所有：<a href="http://www.beian.miit.gov.cn">京ICP备13019191号-1</a> <a href="http://www.shutdown.cn">刹宕博客 By 孟江莱</a>.
        Powered by <a rel="nofollow noreferer noopener" href="https://gohugo.io" target="_blank">Hugo</a>.
        <a href="https://www.flysnow.org/" target="_blank">Theme</a> based on <a href="https://github.com/flysnow-org/maupassant-hugo" target="_blank">maupassant</a>.
    </div>
</footer>



<a id="rocket" href="#top"></a>
<script type="text/javascript" src='/js/totop.js?v=0.0.0' async=""></script>






</body>

</html>